**************************************************************************************
	;Header frs File-linken

	IFD	Flag_project
Flag_waterFX	set 1
	ENDC
	IFND	Flag_waterFX
Flag_waterFX	set 0
	ENDC
	IFEQ	Flag_waterFX
Flag_waterFX	set 1
	include	Nutz_project
	ELSEIF
**************************************************************************************

;--------------------------------------------------------------------------
;-----------	a0 Akt Adr  EffectRouts
;-----------	a1 Akt Adr  Effect_Koord_Tab
;--------------------------------------------------------------------------
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
ENDWATERLEVEL		=	-2
WaterLevelTab		dc.b	0,0,0,0,0,0,0,0,0,0,+1,0,0,0,0,0,0,0,0,+1,0,0,0,0,0,0,+1,0,0,0,0,+1,0,0,+1,0,+1,0,+1,+1,0,+1,0,+1,0,0,+1,0,0,0,0,+1,0,0,0,0,0,0,+1,0,0,0,0,0,0,0,0,+1
			dc.b	0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0,0,-1,0,0,-1,0,-1,0,-1,-1,0,-1,0,-1,0,0,-1,0,0,0,0,-1,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,-1
			dc.b	ENDWATERLEVEL
		even
WaterBubbleOffset	dc.l	WaterBubbleTab
WaterBubbleTab		dc.b	0,002,1,002,0,002,1,002,1,0,002,0,002,002,1,1,002,002,0,002,1,002,1
			dc.b	-1
WaterBubbleXTab		dc.b	0,090,0,040,0,200,0,060,0,0,255,0,020,160,0,0,120,240,0,180,0,040,0
		even

Init_WaterEffekt:
	move.l	#WaterLevelTab,WaterLevelOffset(a6)
	clr.w	WaterOffset(a6)
	move.w	#$8000+Under_WaterVRam/32,Water_Anim(a6)
	move.l	#$81248710,Water_Color(a6)
	sf	Dont_Render(a6)
	rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Make_WaterLevel	;eigentliche Rout
		move.l	WaterLevelOffset(a6),a3
		moveq	#0,d0
		move.b	(a3)+,d0
		ext.w	d0
		add.w	d0,WaterOffset(a6)
		move.w	WaterBase(a6),d1
		add.w	WaterOffset(a6),d1
		move.w	d1,Water_YPos(a6)

		cmp.b	#ENDWATERLEVEL,(a3)
		bne.s	.ok
		lea	WaterLevelTab(pc),a3
.ok		move.l	a3,WaterLevelOffset(a6)
.END:
		bsr	MakeWaterBobs
		rts
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 

Show_WaterSprites:
	move.w	Sig_LinkData(a6),d4
	move.l	Sig_VRam_Pointer(a6),a4

	move.w	#128,d0

	move.w	Water_Anim(a6),d2
	btst	#0,Water_Frame(a6)
	beq.s	.hide
.first:
	moveq	#10-1,d7
	move.w	Water_SpritePos(a6),d1
	add.w	#122,d1

	cmp.w	#120,d1
	blt.s	.hide
	cmp.w	#224+128,d1
	bgt.s	.hide
.loop:
	move.w	d1,(a4)+
	move.b	#$0c,(a4)+
	move.b	d4,(a4)+
	move.w	d2,(a4)+
	move.w	d0,(a4)+

	addq.w	#1,d4
	eor.w	#$0800,d2

	add.w	#32,d0
	dbf	d7,.loop

	move.l	a4,Sig_VRam_Pointer(a6)
	move.w	d4,Sig_LinkData(a6)
.hide:
	bchg	#0,Water_Frame(a6)
	eor.l	#$00000010,Water_Color(a6)

	subq.b	#1,Water_AnVerz(a6)
	bpl.s	.noanim
	move.b	#8,Water_AnVerz(a6)
	addq.w	#1,Water_Anim(a6)
	move.w	Water_Anim(a6),d0
	and.w	#$fff,d0
	cmp.w	#Under_WaterVRam/32+4,d0
	bne.s	.noanim
	and.w	#$f000,Water_Anim(a6)
	add.w	#Under_WaterVRam/32,Water_Anim(a6)
.noanim:
	rts

MakeWaterBobs:
		move.w	WaterBase(a6),d0
		sub.w	Scr_Y_Level_Pos(a6),d0
		cmp.w	#224,d0
		bge	.No_Water_Bobs

		lea	(a6),a2
		*--*>Swim egal MAKE DEAD
		tst.w	UnderWaterTest(a6)
		bne.s	.OtherTest

		move	Water_YPos(a6),d0

		move	TEMET_Y_Position(a2),d2
		cmp	d0,d2
		bhs.s	.OkIn
		tst.w	TEMET_Underwater(a2)
		beq.s	.NoUnderwater
		clr.w	TEMET_Underwater(a2)
		bsr	Make_UnderWaterColours
		bra.s	.NoUnderwater

.OkIn		addq	#1,TEMET_Underwater(a2)
		bsr	Make_UnderWaterColours
		bra.s	.NoUnderwater

.OtherTest	tst	TEMET_Underwater(a2)
		beq	.NoUnderwater
		addq	#1,TEMET_Underwater(a2)
		bsr	Make_UnderWaterColours

.NoUnderwater:
		move	Water_YPos(a6),d0

		;Test if Head is UnderWater
		move	TEMET_Y_Position(a2),d2
		cmp	d0,d2
		blo	.TestBubble
		move.b	#1,WaterHeadInOut(a6)

.TestBubble:
		*--*>Write Back
		;Count if Bubble should appear
;		addq	#1,WaterBubbleCount
;		and	#$f,WaterBubbleCount
;		tst	WaterBubbleCount
;		bne	.TestFoot
;		move.l	WaterBubbleOffset,a3
;		addq.l	#1,WaterBubbleOffset
;		tst.b	(a3)
;		bpl.s	.NoEnd
;		move.l	#WaterBubbleTab,WaterBubbleOffset
;		bra	.TestFoot
;.NoEnd		beq	.TestFoot
;		cmp.b	#2,(a3)
;		beq.s	.RandomBubbles
;
		;TestHead under Water
.TestHead
		move	TEMET_Y_Position(a2),d2
		cmp	d0,d2
		blo	.TestFoot
		bra	.End

;		move	#BUBBLE,d0
;		move	TEMET_X_Position(a2),d1
;		and	#$fff0,d1
;		add	#16,d2
;		tst	TEMET_Anim_Dir(a2)
;		bmi.s	.Enter
;		add	#32,d1
;.Enter		jsr	Search_Bob_Entry
		IFEQ	SOUNDFX
		moveq	#6,d0
		jsr	TFMX+16
		ENDC
;		bra	.End

;.RandomBubbles	;Bubbles appearing Randomising
;		move	#BUBBLE,d0
;		move	Scr_Y_Level_Pos(a6),d2
;		add	Scr_Y_Visible(a6),d2
;		move	Scr_X_Level_Pos(a6),d1
;		moveq	#0,d3
;		move.b	WaterBubbleXTab-WaterBubbleTab(a3),d3
;		add	d3,d1
;		and	#$fff0,d1
;		jsr	Search_Bob_Entry
;		bra.s	.TestFootFurther

.TestFoot		;test if Head comes out of water
		tst	TEMET_Speed_Y(a2)
		bpl	.TestFootFurther
		move	TEMET_Y_Position(a2),d2
		cmp	d0,d2
		bhs	.TestFootFurther
		tst.b	WaterHeadInOut(a6)
		beq.s	.TestFootFurther
		clr.b	WaterHeadInOut(a6)

		movem.l	a0/a2/d7,-(sp)
		move	d0,d2
		sub	#16,d2
		bsr	Start_Splash

		movem.l	(sp)+,a0/a2/d7

		IFEQ	SOUNDFX
		moveq	#5,d0
		jsr	TFMX+16
		ENDC

.TestFootFurther	;test if is under water
		move	Water_YPos(a6),d0
		move	TEMET_Y_Position(a2),d2
		add	TEMET_Y_Foot_Offset(a2),d2
		cmp	d0,d2
		blo	.Out
.In		tst.b	WaterInOut(a6)
		bne	.End
		move.b	#1,WaterInOut(a6)
		move	#6,TEMET_MaxSpeed(a2)
		move	#15,TEMET_MaxJumpHight(a2)
		move	#$0300,TEMET_AnfJumpSpeedB(a2)
		move	#25,TEMET_Gravity_Jump(a2)
		move	#10,TEMET_Gravity_WalkU(a2)
		move	#40,TEMET_Gravity_WalkD(a2)
		move	#08,TEMET_Acce_Jump(a2)
		move	#12,TEMET_Acce_Walk(a2)
		move	#20,TEMET_Auslaufen(a2)
		move	#32,TEMET_Bremsen(a2)
		move	#25,TEMET_Jumpen(a2)

		cmp	#3,TEMET_Shield_Flag(a2)
		bne.s	.ContiEnd

		tst	TEMET_Shield_Save(a2)
		beq.s	.NormalOut
		cmp	#1,TEMET_Shield_Save(a2)
		beq.s	.NormShieldInit
		cmp	#2,TEMET_Shield_Save(a2)
		beq.s	.TimeShieldInit
		bra.s	.NormalOut
.TimeShieldInit	*--*>Time Shield
		move	#2,TEMET_Shield_Flag(a2)
		move	#12*50,TEMET_Been_HitTimer(a2)
		clr.w	TEMET_Shield_Save(a2)
		bra.s	.OKNOTOUT
.NormShieldInit	*--*>Normales Shield
		move	#1,TEMET_Shield_Flag(a2)
		move	#-1,TEMET_Been_HitTimer(a2)
		clr.w	TEMET_Shield_Save(a2)
		bra.s	.OKNOTOUT
.NormalOut	*--*>Einfach flash austragen
		move	#65,TEMET_Been_HitTimer(a2)
		clr.w	TEMET_Shield_Flag(a2)
		clr.w	TEMET_Shield_Save(a2)
.OKNOTOUT

.ContiEnd	addq	#1,TEMET_Underwater(a2)

		tst	TEMET_Speed_Y(a2)
		ble	.End

		cmp.b	#$05,TEMET_Speed_Y(a2)
		blo.s	.only_One
.Two		*--*>groe Geschwindigkeit zwei Platscher

		bsr	Start_Splash

		IFEQ	SOUNDFX
		moveq	#5,d0
		jsr	TFMX+16
		ENDC

.only_One		*--*>kleine Geschwindigkeit nur ein Platsch

		bsr	Start_Splash

		;move	#SPLASH_1,d0
		;move	TEMET_X_Position(a2),d1
		;sub	#16,d1
		;jsr	Search_Bob_Entry
		;move	#SPLASH_1,d0
		;move	TEMET_X_Position(a2),d1
		;add	#16,d1
		;jsr	Search_Bob_Entry
		IFEQ	SOUNDFX
		moveq	#5,d0
		jsr	TFMX+16
		ENDC
		rts

.Out		tst.b	WaterInOut(a6)
		beq	.End
		clr.b	WaterInOut(a6)
		move	#8,TEMET_MaxSpeed(a2)
		move	#13,TEMET_MaxJumpHight(a2)
		move	#$0500,TEMET_AnfJumpSpeedB(a2)
		move	#60,TEMET_Gravity_Jump(a2)
		move	#20,TEMET_Gravity_WalkU(a2)
		move	#100,TEMET_Gravity_WalkD(a2)
		move	#20,TEMET_Acce_Jump(a2)
		move	#30,TEMET_Acce_Walk(a2)
		move	#10,TEMET_Auslaufen(a2)
		move	#65,TEMET_Bremsen(a2)
		move	#50,TEMET_Jumpen(a2)
		sub	#$0200,TEMET_Speed_Y(a2)
		clr.w	TEMET_Underwater(a2)

.End:
.No_Water_Bobs:
		rts

SPLASH_TIME	EQU	Bob_Special_1

Start_Splash:
		moveq	#1,d0
		move	TEMET_X_Position(a2),d1
		subq	#8,d1		;RUNDEN
		lea	Area_Enter_Vector(a6),a1
		jsr	Search_Bob_Entry
		move.l	#Init_Splash,Bob_Routine(a4)

		rts

Init_Splash:
		move.l	#Display_Splash,Bob_Routine(a4)
		move.b	#20,SPLASH_TIME(a4)
		rts

Display_Splash:
		move.w	Water_YPos(a6),d0
		sub.w	#10,d0
		move.w	d0,Bob_Y_Position(a4)
		jsr	Test_Bob_Out
		subq.b	#1,SPLASH_TIME(a4)
		beq.s	.End_Splash
		cmp.b	#10,SPLASH_TIME(a4)
		bhs.s	.show
		tst.b	Akt_Copper_Frame(a6)
		beq.s	.hide
.show:
		moveq	#0,d2
		move.w	#Extras_VRam/32,d3
		lea	Splash_Obj_1,a0
		jmp	Show_Simple_Object
.hide:
		rts
.End_Splash	*--*>FINI
		jmp	Out_Bob_Damage

Splash_Obj_1:
	dc.w $e010
	dc.w $0c00
	dc.w CBASE+$0076
	dc.b 0
	dc.b 0
	dc.w -1



Make_UnderWaterColours	*--*>Colours under Water
		move.w	UnderWaterMax(a6),d0
		sub	TEMET_Underwater(a2),d0
		bmi.s	.Make_Hitpoint_Come
		move.w	UnderWaterShift(a6),d1
		lsr	d1,d0
		beq.s	.Make_Hitpoint_Come
		cmp	#5,d0
		bls.s	.OkSize
		moveq	#5,d0
.OkSize		add	d0,d0
		add	d0,d0
		lea	WaterColours_Adr(pc),a3
		add	d0,a3
		move.l	(a3),a3
.InitColours:
		tst.b	Is_Fading(a6)
		bne.s	.set_no_colors
		tst.b	Dont_Render(a6)
		bne.s	.set_no_colors
		tst.b	Dead(a6)
		bne.s	.set_no_colors
		move.l	UnderWaterColors(a6),a4
		move	(a3)+,4(a4)
		move	(a3)+,2(a4)
		move	(a3)+,6(a4)
		move	(a3)+,8(a4)
		move	(a3)+,10(a4)
		move	(a3)+,12(a4)
		move	(a3)+,14(a4)
		move	(a3)+,18(a4)
.set_no_colors:
		rts

.Make_Hitpoint_Come	*--*>HitPointCome
		tst.w	UnderWaterTest(a6)
		bne.s	.Testen
		tst.b	Swim(a6)
		beq.s	.Testen
		lea	WaterColours_Blue0(pc),a3
		bra	.InitColours
.Testen		move	#100,d5
		jsr	Sub_TEMET_Hitpoint
		lea	WaterColours_Blue0(pc),a3
		bra	.InitColours


;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
;- - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
*-------------------------------------------------------------------------------------
WaterColours_Adr	dc.l	WaterColours_Blue0,WaterColours_Blue1
			dc.l	WaterColours_Blue2,WaterColours_Blue3
			dc.l	WaterColours_Norm,WaterColours_Norm

WaterColours_Norm	dc.w	$faa,$f77,$a44,$50e,$50b,$408,$405,$fdd
WaterColours_Blue3	dc.w	$f99,$f66,$d33,$a0e,$a0b,$808,$704,$fcc
WaterColours_Blue2	dc.w	$fa7,$f84,$f31,$f4d,$f4a,$d07,$b03,$fc8
WaterColours_Blue1	dc.w	$fb0,$f80,$f30,$fb2,$f85,$f53,$e00,$fe0
WaterColours_Blue0	dc.w	$fb0,$f80,$f30,$fb2,$f85,$f53,$e00,$fe0


*-------------------------------------------------------------------------------------
*-------------------------------------------------------------------------------------
*----------------	WATERBOBS + ROUTS
*-------------------------------------------------------------------------------------
;SPLASH_Info_1	dc.w	NORM		;Bob_Mode
;		dc.w	BOB_LOW_PRIO	;Bob_I_Prio
;		dc.w	0		;Bob_I_Out_X_Val
;		dc.w	0		;Bob_I_Out_Y_Val
;		dc.w	32		;Breite in Pixels
;		dc.w	8		;Hhe in Pixels
;		dc.w	3		;Tiefe in Planes
;		dc.w	32/8		;Breite einer Zeile der Maske in Bytes
;		dc.w	2*2		;A Modulo
;		dc.w	2*2*3		;B Modulo
;		dc.w	planeb*3		;D Modulo
;		dc.w	planeb		;Save Modulo
;		dc.l	$ffff0000		;Bob_I_AFWM
;		dc.w	3		;Breite in Wrtern
;		dc.w	6		;Breite in Bytes
;		dc.w	0		;Hitpoints
;		dc.l	SPLASH_IRout1	;Routine, die Bob verwaltet
;		dc.l	SPLASH_Anim	;Zeiger auf nchste Anim
;		dc.w	0		;Delay
;		dc.w	2		;Delay Init
;		dc.l	$ff000001		;Flags, die angeben welche Planes im Playfield mit der Maske beschrieben werden sollen.
*---------------------------------------------------------------------------
;SPLASH_IRout1	*--*>Init SPLASH_1
;		move	#15,SPLASH_TIME(a4)
;		move.l	#SPLASH_Main_Rout,Bob_Routine(a4)
;		rts
*---------------------------------------------------------------------------
;SPLASH_Main_Rout	*---*>Hauptroutine fr SPLASH
;		move	Water_Effect+Effect_Y_Anf,Bob_Y_Position(a4)
		subq	#8,Bob_Y_Position(a4)
;		*--*>sub tiem test End
;		subq	#1,SPLASH_TIME(a4)
;		beq.s	.End_Splash
;		cmp	#10,SPLASH_TIME(a4)
;		bhs.s	.Ende
;		and.b	#$ff-NO_BLIT_VAL,Bob_BlitStatus(a4)	;BLIT ON
;		tst	Akt_Copper_Frame
;		beq.s	.Ende
;		or.b	#NO_BLIT_VAL,Bob_BlitStatus(a4)	;BLIT OFF
;.Ende		rts
;.End_Splash	*--*>FINI
;		jsr	Out_Bob_Damage
;		rts
*------------------------------------------------------------------------------
;SPLASH_Anim	dc.l	Splash.GFX,Splash.MSK
;		dc.w	0,0,8
;		dc.w	ENTRY_END
;		dc.l	SPLASH_Anim
*------------------------------------------------------------------------------
*------------------------------------------------------------------------------
	ENDC
